import Logger from '@/utils/logger'

/**
 * 本地存储加密工具
 * 使用Base64 + 简单混淆实现加密
 * 注意：这不是强加密，主要用于防止明文存储，敏感数据仍需后端加密
 */

// 加密密钥（生产环境应从环境变量读取）
const SECRET_KEY = process.env.VUE_APP_STORAGE_KEY || 'aggregation-ui-secret-2024'

class SecureStorage {
  /**
   * 简单的字符串加密（Base64 + 混淆）
   */
  static encrypt(data) {
    try {
      const str = typeof data === 'string' ? data : JSON.stringify(data)

      // 简单混淆：与密钥进行字符异或
      let encrypted = ''
      for (let i = 0; i < str.length; i++) {
        const charCode = str.charCodeAt(i) ^ SECRET_KEY.charCodeAt(i % SECRET_KEY.length)
        encrypted += String.fromCharCode(charCode)
      }

      // Base64编码
      return btoa(encodeURIComponent(encrypted))
    } catch (error) {
      Logger.error('加密失败:', error)
      return null
    }
  }

  /**
   * 简单的字符串解密
   */
  static decrypt(encryptedData) {
    try {
      if (!encryptedData) return null

      // Base64解码
      const encrypted = decodeURIComponent(atob(encryptedData))

      // 解密：与密钥进行字符异或
      let decrypted = ''
      for (let i = 0; i < encrypted.length; i++) {
        const charCode = encrypted.charCodeAt(i) ^ SECRET_KEY.charCodeAt(i % SECRET_KEY.length)
        decrypted += String.fromCharCode(charCode)
      }

      // 尝试解析JSON
      try {
        return JSON.parse(decrypted)
      } catch {
        return decrypted
      }
    } catch (error) {
      Logger.error('解密失败:', error)
      return null
    }
  }

  /**
   * 设置加密的localStorage项
   */
  static setItem(key, value) {
    try {
      const encrypted = this.encrypt(value)
      if (encrypted) {
        localStorage.setItem(key, encrypted)
        return true
      }
      return false
    } catch (error) {
      Logger.error('存储失败:', error)
      return false
    }
  }

  /**
   * 获取并解密localStorage项
   */
  static getItem(key) {
    try {
      const encrypted = localStorage.getItem(key)
      if (!encrypted) return null
      return this.decrypt(encrypted)
    } catch (error) {
      Logger.error('读取失败:', error)
      return null
    }
  }

  /**
   * 移除localStorage项
   */
  static removeItem(key) {
    try {
      localStorage.removeItem(key)
      return true
    } catch (error) {
      Logger.error('移除失败:', error)
      return false
    }
  }

  /**
   * 清空所有localStorage
   */
  static clear() {
    try {
      localStorage.clear()
      return true
    } catch (error) {
      Logger.error('清空失败:', error)
      return false
    }
  }

  /**
   * 设置加密的sessionStorage项
   */
  static setSessionItem(key, value) {
    try {
      const encrypted = this.encrypt(value)
      if (encrypted) {
        sessionStorage.setItem(key, encrypted)
        return true
      }
      return false
    } catch (error) {
      Logger.error('存储失败:', error)
      return false
    }
  }

  /**
   * 获取并解密sessionStorage项
   */
  static getSessionItem(key) {
    try {
      const encrypted = sessionStorage.getItem(key)
      if (!encrypted) return null
      return this.decrypt(encrypted)
    } catch (error) {
      Logger.error('读取失败:', error)
      return null
    }
  }
}

/**
 * 便捷方法：用于用户敏感信息存储
 */
export const userStorage = {
  // 存储用户ID
  setUserId(userId) {
    SecureStorage.setItem('aggregation-userId', userId)
  },

  getUserId() {
    return SecureStorage.getItem('aggregation-userId')
  },

  // 存储用户类型
  setUserType(userType) {
    SecureStorage.setItem('aggregation-userType', userType)
  },

  getUserType() {
    const value = SecureStorage.getItem('aggregation-userType')
    return value ? parseInt(value) : null
  },

  // 存储用户手机号
  setUserPhone(phone) {
    SecureStorage.setItem('aggregation-userPhone', phone)
  },

  getUserPhone() {
    return SecureStorage.getItem('aggregation-userPhone')
  },

  // 存储用户详情
  setUserDetail(userDetail) {
    SecureStorage.setItem('userDetail', userDetail)
  },

  getUserDetail() {
    return SecureStorage.getItem('userDetail')
  },

  // 存储用户头像
  setUserAvatar(avatar) {
    SecureStorage.setItem('aggregation-userAvatar', avatar)
  },

  getUserAvatar() {
    return SecureStorage.getItem('aggregation-userAvatar')
  },

  removeUserAvatar() {
    SecureStorage.removeItem('aggregation-userAvatar')
  },

  // 清除所有用户信息
  clearUserInfo() {
    SecureStorage.removeItem('aggregation-userId')
    SecureStorage.removeItem('aggregation-userType')
    SecureStorage.removeItem('aggregation-userPhone')
    SecureStorage.removeItem('userDetail')
    SecureStorage.removeItem('aggregation-userAvatar')
  },

  // 清除所有用户数据（包括ID、类型、手机号、详情、头像等）
  clearAll() {
    this.clearUserInfo()
    this.removeUserId()
    this.removeUserType()
    this.removeUserPhone()
    this.removeUserAvatar()
  },

  // 移除用户ID
  removeUserId() {
    SecureStorage.removeItem('aggregation-userId')
  },

  // 移除用户类型
  removeUserType() {
    SecureStorage.removeItem('aggregation-userType')
  },

  // 移除用户手机号
  removeUserPhone() {
    SecureStorage.removeItem('aggregation-userPhone')
  }
}

export default SecureStorage

